package com.fotkidemo.util;

import android.content.Context;
import android.os.Environment;
import android.util.Log;
import android.util.LruCache;
import com.fotkidemo.BuildConfig;

import java.io.File;
import java.io.UnsupportedEncodingException;
import java.net.URLEncoder;

/**
 * Created with IntelliJ IDEA.
 * User: roma
 * Date: 6/19/12
 * Time: 2:04 AM
 * To change this template use File | Settings | File Templates.
 */

/**
 * Кэш хранит ссылки на фотки в качестве ключей и пути к файлам картинок.
 * После скачивания картинки по ссылке в файл в кэше создается запись о пути к данному файлу.
 */
public class DiskCache {
    public static final String TAG = "DiskCache";
    private static final String CACHE_FILENAME_PREFIX = "cache_";
    private static final int MAX_SIZE = 1024;

    private String id;
    private static File cacheDir;

    private final LruCache<String, String> lruCache;


    private static volatile DiskCache instance;

    public static DiskCache initAndCreate(Context context, String uniqueName) {
        // Check if media is mounted or storage is built-in, if so, try and use external cache dir
        // otherwise use internal cache dir
        final String cachePath =
                Environment.getExternalStorageState() == Environment.MEDIA_MOUNTED ||
                        !Utils.isExternalStorageRemovable() ?
                        Utils.getExternalCacheDir(context).getPath() :
                        context.getCacheDir().getPath();

        cacheDir = new File(cachePath + File.separator + uniqueName);

        if (!cacheDir.exists()) {
            cacheDir.mkdir();
        }

        if (cacheDir.isDirectory() && cacheDir.canWrite()) {
            return new DiskCache();
        }
        return null;
    }

//    public static DiskCache getInstance() {
//        if (instance == null) {
//            instance = new DiskCache();
//        }
//        return instance;
//    }

    private DiskCache() {
        lruCache = new LruCache<String, String>(MAX_SIZE);
    }

    public void put(String key, String path) {
        lruCache.put(key, path);
    }

    public String get(String key) {
        return lruCache.get(key);
    }

    public File getCacheDir() {
        return cacheDir;
    }

    /**
     * По каждой ссылке создается уникальный путь
     * @param key ссылка на картинку
     * @return путь к файлу
     */
    public String createFilePath(String key) {
        try {
            String filePath = cacheDir.getAbsolutePath() + File.separator +
                    CACHE_FILENAME_PREFIX + URLEncoder.encode(key.replace("*", ""), "UTF-8");

            if (BuildConfig.DEBUG)
                Log.d(TAG, new StringBuilder("Create file path ").append(filePath).toString());

            return filePath;
        } catch (final UnsupportedEncodingException e) {
            Log.e(TAG, new StringBuilder("createFilePath - ").append(e).toString());
        }

        return null;
    }
}
